﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using VINETLIFE.BL;
using VINETLIFE.DO;
using System.Web.UI.HtmlControls;
using VINETLIFE.AdminCP;
using System.Net.Mail;
using VINETLIFE.BaseClass;


namespace VINETLIFE.Module
{
    public partial class Login_Register : System.Web.UI.UserControl
    {
        public int PercentForIntroduction = 10;
        public long sPercentAfterUseVinetlifeAccount = 0;
        int ScustomerId = 0;
        long SpmcDepositeAfter = 0; /// !
        long StotalMemberValue = 0;
        long SpmcPayByVinetlifeAccount = 0;
        long SpmcMoneyHaveToPay = 0;
        string orderCode = "";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["shop"] == null)
            {
                Functions.Alert("Không có sản phẩm nào trong giỏ hàng!", "/");
                Session["shop"] = new MyShopCart();
            }
            if (Session["CustomerId"] != null)
            {
                if (!IsPostBack)
                {
                    LoadDetail();
                    LoadForm();
                    try
                    {
                        sysConfigDO objConfig = new sysConfigBL().Select(new sysConfigDO { ConfigID = 35 });
                        if (objConfig != null)
                        {
                            PercentForIntroduction = int.Parse(objConfig.ConfigValue);
                        }
                        else
                        {
                            PercentForIntroduction = 10;
                        }
                    }
                    catch
                    {
                        PercentForIntroduction = 10;
                    }
                }
                trVinetlifeAccount.Visible = true;
            }
            else
            {
                InfoDetail.Visible = false;
                lbDangnhap.CssClass = "red";
                trVinetlifeAccount.Visible = false;
            }
            if (!IsPostBack)
            {
                ShowData();
                ddlPaymentMethodDataSource();
                txtUsername.Attributes.Add("onkeypress", "doClick('" + btnLogin.ClientID + "',event)");
                txtPass.Attributes.Add("onkeypress", "doClick('" + btnLogin.ClientID + "',event)");
            }
            //SEO
        }
        private void ddlPaymentMethodDataSource()
        {
            ddlPaymentMethod.DataSource = new cmsPaymentMethodBL().SelectToCart();
            ddlPaymentMethod.DataBind();
        }
        private void ShowData()
        {
            DataTable table = new DataTable();
            table.Columns.Add("Id");
            table.Columns.Add("Name");
            table.Columns.Add("Cost");
            table.Columns.Add("Image");
            table.Columns.Add("Quantity");
            table.Columns.Add("TotalCost");
            table.Columns.Add("TotalMemberCost");
            table.Columns.Add("ProductCode");
            if (Session["shop"] != null)
            {
                foreach (var item in ((MyShopCart)Session["shop"]).ListProduct)
                {

                    DataRow row = table.NewRow();
                    row["Id"] = item.Id;
                    row["Name"] = item.Name;
                    if (item.Cost == null)
                    {
                        String.Format("{0:0,0} đ", 0);
                    }
                    else
                    {
                        row["Cost"] = String.Format("{0:0,0} đ", item.Cost);
                    }
                    row["Image"] = item.Image;
                    row["Quantity"] = item.Quantity;
                    row["ProductCode"] = item.ProductCode;
                    row["TotalCost"] = String.Format("{0:0,0} đ", item.Quantity * item.Cost);
                    row["TotalMemberCost"] = String.Format("{0:0,0} đ", item.Quantity * item.MemberCost);
                    table.Rows.Add(row);
                }

                GridView1.DataSource = table;
                GridView1.DataBind();
            }


            if (Session["shop"] != null)
            {
                decimal totalCost = ((MyShopCart)Session["shop"]).GetTotalCost();
                decimal totalMemberCost = ((MyShopCart)Session["shop"]).GetTotalMemberCost();
                lblTongTien.Text = String.Format("{0:0,0}", totalCost) + " đ";

                string longCost = String.Format("{0:0}", totalCost);
                ClsDocTien cls = new ClsDocTien();

                hpfTotalCost.Value = totalCost.ToString();
                hplMemberCost.Value = totalMemberCost.ToString();

            }
        }

        void LoadForm()
        {
            cmsCustomerDO itemDO = new cmsCustomerDO();
            int userID = Convert.ToInt32(Session["CustomerId"]);
            itemDO.Id = userID;
            itemDO = new cmsCustomerBL().Select(itemDO);

            txtName.Text = itemDO.FullName;
            txtShipAddress.Text = itemDO.Address;
            txtEmail.Text = itemDO.Email;
            txtNgayNhan.Text = DateTime.Now.ToString("dd/MM/yyyy");
            txtPhone.Text = itemDO.Phone;
        }

        void LoadDetail()
        {
            loginUser.Visible = false;
            InfoDetail.Visible = true;
            lbThongtin.CssClass = "red";
        }
        protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
        {
            LoadDetail();
        }

        protected void btnLogin_Click(object sender, EventArgs e)
        {
            string sPass = VINETLIFE.AdminCP.Functions.EncryptMd5(txtPass.Text.Trim());
            DataTable dtUser = new cmsCustomerBL().SelectLogin(txtUsername.Text.Trim(), sPass);
            if (dtUser.Rows.Count > 0)
            {
                Session["FullName"] = dtUser.Rows[0]["FullName"].ToString();
                Session["CustomerId"] = dtUser.Rows[0]["ID"].ToString();
                string urlReturn = "";
                if (Request.QueryString["ReturnURL"] != null)
                    urlReturn = Request.QueryString["ReturnURL"].ToString();
                if (string.IsNullOrEmpty(urlReturn))
                {
                    Response.Redirect("/thanh-toan/");
                    LoadDetail();
                }
                else
                    Response.Redirect(urlReturn);

            }
            else
            {
                VINETLIFE.AdminCP.Functions.Alert("Sai tên đăng nhập");
            }
        }
        protected void btnRegister_Click(object sender, EventArgs e)
        {
            Response.Redirect("/dang-ky/");
        }
        protected void btnSend_Click(object sender, EventArgs e)
        {
            if (CheckPaymentMethod() && CheckIsUseVinetlifeAccount())
            {
                if (AddShopcart())
                {
                    SendMail();
                    Session["shop"] = null;
                    InfoDetail.Visible = false;
                    loginUser.Visible = false;
                    success.Visible = true;
                    lbSucsess.CssClass = "red";
                    lbThongtin.CssClass = "";
                }
                else
                {
                    Ultility.Alert("Có lỗi xảy ra trong quá trình đặt hàng, vui lòng liên hệ với bộ phận quản trị.", "/");
                }
            }
            else
            {
                InfoDetail.Visible = true;
                return;
            }
        }
        private bool CheckIsUseVinetlifeAccount()
        {
            if (chkUseVinetlife.Checked)
            {
                if (Session["CustomerId"] == null)
                {
                    Functions.Alert("Vui lòng đăng nhập để sử dụng tính năng này");
                    return false;
                }
                else
                {
                    /// Kiểm tra xem số tiền có đủ ko để trừ tiền!

                    VINETLIFE.DO.cmsAccountDO objClientAccount = new VINETLIFE.DO.cmsAccountDO();

                    ScustomerId = int.Parse(Session["CustomerId"].ToString());
                    objClientAccount = new VINETLIFE.BL.cmsAccountBL().AccountInfoObject(ScustomerId);
                    if (objClientAccount == null)
                    {
                        Functions.Alert("Không có tài khoản Vinetlife, vui lòng liên hệ với quản trị website!");
                        return false;
                    }
                    else
                    {
                        if (objClientAccount.Deposite > 3000000)
                        {
                            Functions.Alert("Tài khoản Ví Vinetlife khống chế dưới 3 triệu VNĐ, tài khoản của bạn có số dư lớn hơn 3 triệu VNĐ nên không thể thực hiện giao dịch này, Vui lòng bỏ chọn Thanh toán sử dụng Ví Vinetlife!");
                            return false;
                        }
                        else
                        {
                            StotalMemberValue = long.Parse(hplMemberCost.Value);
                            SpmcPayByVinetlifeAccount = StotalMemberValue * PercentForIntroduction / 100;
                            SpmcMoneyHaveToPay = StotalMemberValue - SpmcPayByVinetlifeAccount;
                            SpmcDepositeAfter = objClientAccount.Deposite - SpmcPayByVinetlifeAccount;

                            if (SpmcDepositeAfter < 0)
                            {
                                Functions.Alert("Số tiền trong ví không đủ để thực hiện giao dịch này!");
                                return false;
                            }
                            else
                            {
                                return true;
                            }
                        }
                    }
                }
            }
            else
            {
                return true;
            }
        }
        private bool CheckPaymentMethod()
        {
            if (ddlPaymentMethod.SelectedValue.ToLower().Equals("no"))
            {
                ddlPaymentMethod.Focus();
                return false;
            }
            else if (ddlPaymentMethod.SelectedValue.ToLower().Equals("home"))
            {
                if (txtShipAddress.Text.Trim().Equals(""))
                {
                    txtShipAddress.Focus();
                    Ultility.Alert("Vui lòng nhập địa chỉ giao hàng");
                    return false;
                }
                else
                {
                    return true;
                }
            }
            else { return true; }
            /// Check if tick to Use Vinetlife Account
        }
        private void Reset()
        {
            txtPhone.Text = "";
            txtName.Text = "";
            txtEmail.Text = "";
            txtShipAddress.Text = "";
            txtNgayNhan.Text = "";
        }
        void SendMail()
        {
            string mUserName = "Khách vãng lai";
            if (Session["UserName"] != null)
                mUserName = Session["UserName"].ToString();

            DateTime now = DateTime.Now;
            string date = now.Day + " - " + now.Month + " - " + now.Year + "  " + now.Hour + ":" + now.Minute;

            MyShopCart myShop = (MyShopCart)Session["shop"];
            string totalCost = String.Format("{0:0,0}", myShop.GetTotalCost());

            string content = "<div style='margin-top:10px'>";
            content += "<fieldset>";
            content += "<legend>Thông tin đặt hàng</legend>";
            content += " <table width='100%' border='1' cellpadding='3' cellspacing='0' style='border-collapse:collapse'>";
            content += "<tbody><tr bgcolor='#999999' style='color:#FFF'><td colspan='2'>Thông tin khách hàng </td></tr>";
            content += "<tr><td style='width:200px'>Username : </td><td>" + mUserName + "</td></tr>";
            content += "<tr><td style='width:200px'>Họ tên : </td><td>" + txtName.Text + "</td></tr>";
            content += "<tr><td>Địa chỉ : </td><td>" + txtShipAddress.Text + "</td></tr>";
            content += "<tr><td>Điện thoại : </td><td>" + txtPhone.Text + "</td></tr> ";
            content += "<tr><td>Email : </td><td>" + txtEmail.Text + "</td></tr>";
            content += "<tr><td>Ghi chú của khách hàng: </td><td>" + txtNote.Text + "</td></tr>";
            if (chkUseVinetlife.Checked)
            {
                content += "<tr><td>Ghi chú đơn hàng : </td><td><b><i> Đơn hàng có sử dụng tài khoản Ví Vinetlife</i></b> </td></tr>";
            }
            content += "<tr><td>Mã đơn hàng</td><td><b>" + orderCode + "</b></td></tr>";
            content += "<tr bgcolor='#999999' style='color:#FFF'><td colspan='2'>Thông tin sản phẩm đặt hàng </td></tr>";
            int count_item = 1;
            if (chkUseVinetlife.Checked)
            {
                foreach (var item in myShop.ListProduct)
                {
                    content += "<tr><td style='width:200px'>Sản phẩm " + count_item + "</td><td>" + item.Name + " - Mã : " + item.ProductCode + " - Số lượng : " + item.Quantity + " - Giá : " + String.Format("{0:0,0}", item.MemberCost) + " đ </td></tr>";
                    count_item++;
                }
                content += "<tr><td>Đã thanh toán bằng Ví Vinetlife : </td><td>" + String.Format("{0:0,0}", SpmcPayByVinetlifeAccount) + " đ </td></tr>";
                content += "<tr bgcolor='#999999' style='color:#FFF'><td colspan='2'>Tổng giá trị : " + String.Format("{0:0,0}", SpmcMoneyHaveToPay) + " đ </td></tr>";
            }
            else
            {
                foreach (var item in myShop.ListProduct)
                {
                    content += "<tr><td style='width:100px'>Sản phẩm " + count_item + "</td><td>" + item.Name + " - Mã : " + item.ProductCode + " - Số lượng : " + item.Quantity + " - Giá : " + String.Format("{0:0,0}", item.Cost) + " đ </td></tr>";
                    count_item++;
                }

                content += "<tr bgcolor='#999999' style='color:#FFF'><td colspan='2'>Tổng giá trị : " + String.Format("{0:0,0}", totalCost) + " đ</td></tr>";
            }

            content += "</table>";

            content += "<p>Ngày gửi : " + now.ToString("dd/MM/yyyy HH:mm tt") + "</p><p style='color:#333;font-size:12px;font-weight:bold;'>Website: http://vinetlife.vn </p></fieldset></div>";
            content += "<br /><p><b>Chú ý: </b> đây là thư tự động, vui lòng không phản hồi thư này. Vui lòng kiểm tra đơn hàng tại trang quản trị. Cám ơn!</p>";
            Ultility.sendsMail("Đơn đặt hàng của khách hàng: " + txtName.Text.Trim(), content, "Đơn đặt hàng ngày: " + now.ToString("dd/MM/yyyy HH:mm tt"), txtEmail.Text.Trim());
        }
        bool AddShopcart()
        {
            try
            {
                bool IsUseVinetlifeAccount = chkUseVinetlife.Checked;

                cmsCustomerBL data = new cmsCustomerBL();
                cmsCustomerDO itemCustomerDO = new cmsCustomerDO();
                cmsOrdersDO itemOrderDO = new cmsOrdersDO();
                cmsOrdersBL dataOrder = new cmsOrdersBL();
                cmsAccountDO objAccount = new cmsAccountDO();
                cmsAccountBL accountBL = new cmsAccountBL();
                int customerId = 0;
                if (Session["CustomerId"] != null)
                {
                    customerId = Convert.ToInt32(Session["CustomerId"]);
                    itemCustomerDO.Id = customerId;
                    itemCustomerDO = data.Select(itemCustomerDO);
                    objAccount = accountBL.AccountInfoObject(customerId);
                    itemOrderDO.AccountId = objAccount.AccountId;
                    itemOrderDO.AccountCode = objAccount.AccountCode;
                }
                else
                {
                    //Customer
                    itemCustomerDO.Address = txtShipAddress.Text;
                    itemCustomerDO.Brithday = Convert.ToDateTime("1/1/1900");
                    itemCustomerDO.Email = txtEmail.Text.Trim();
                    itemCustomerDO.FullName = txtName.Text.Trim();
                    itemCustomerDO.IsEnable = false;
                    itemCustomerDO.IsVangLai = true;
                    itemCustomerDO.Password = "";
                    itemCustomerDO.Phone = txtPhone.Text;
                    itemCustomerDO.RegisterDay = Convert.ToDateTime("1/1/1900");
                    itemCustomerDO.Sex = true;
                    itemCustomerDO.LastSaveDate = Convert.ToDateTime("1/1/1900");
                    itemCustomerDO.IntroductionCustomerId = -1;
                    itemCustomerDO.IntroductionCustomerCode = "";
                    itemCustomerDO.Identification = "";
                    itemCustomerDO.UserName = "";
                    itemCustomerDO.CreatedDate = DateTime.Now;
                    customerId = data.Insert(itemCustomerDO);
                }
                //Order
                itemOrderDO.CreateDate = DateTime.Now;
                itemOrderDO.Address = txtShipAddress.Text.Trim();
                itemOrderDO.CustomerId = customerId;
                itemOrderDO.DateOfStart = DateTime.Now;
                itemOrderDO.DateOfFisnish = Myfunction.ReturnValidateDateTime(txtNgayNhan.Text);
                itemOrderDO.IsEnable = false;
                itemOrderDO.IsView = false;
                itemOrderDO.Phone = txtPhone.Text.Trim();
                itemOrderDO.Status = false;
                itemOrderDO.PaymentMethod = ddlPaymentMethod.SelectedValue;
                itemOrderDO.InvoiceNumber = Ultility.TimeStamp().ToString();
                orderCode = itemOrderDO.InvoiceNumber;
                itemOrderDO.Note = txtNote.Text;

                if (IsUseVinetlifeAccount)
                {
                    itemOrderDO.SubTotal = SpmcMoneyHaveToPay;
                    itemOrderDO.IsUseVirtualAccount = true;
                    itemOrderDO.PercentPayedByVirtualAccount = PercentForIntroduction;
                    itemOrderDO.MoneyPayedByVirtualAccount = SpmcPayByVinetlifeAccount;
                }
                else
                {
                    itemOrderDO.SubTotal = long.Parse(hpfTotalCost.Value);
                    itemOrderDO.IsUseVirtualAccount = false;
                    itemOrderDO.PercentPayedByVirtualAccount = 0;
                    itemOrderDO.MoneyPayedByVirtualAccount = 0;
                }

                itemOrderDO.Shipping = 0;
                itemOrderDO.Tax = 0;
                itemOrderDO.GrandTotal = itemOrderDO.SubTotal + itemOrderDO.Shipping - itemOrderDO.Tax;
                itemOrderDO.SystemStatus = EnumSystemStatus.V_ORDER_ACTIVE;
                itemOrderDO.LastSaveDate = new DateTime(1900, 1, 1);
                itemOrderDO.LastModifiedId = -1;
                itemOrderDO.TransactionOrderStatus = EnumTransactionOrderStatus.V_ORDER_NEW;

                int idOrder = dataOrder.Insert(itemOrderDO);

                //OrderDetail
                cmsOrderDetailsDO itemOrderDetailDO = new cmsOrderDetailsDO();
                cmsOrderDetailsBL dataOrderDetail = new cmsOrderDetailsBL();

                foreach (var item in ((MyShopCart)Session["shop"]).ListProduct)
                {
                    itemOrderDetailDO.Qty = item.Quantity;
                    itemOrderDetailDO.ProductId = item.Id;
                    if (IsUseVinetlifeAccount)
                    {
                        itemOrderDetailDO.Price = double.Parse(item.MemberCost.ToString().Replace(",", ""));
                    }
                    else
                    {
                        itemOrderDetailDO.Price = double.Parse(item.Cost.ToString().Replace(",", ""));
                    }
                    itemOrderDetailDO.OrderId = idOrder;
                    dataOrderDetail.Insert(itemOrderDetailDO);
                }
                /// Ghi logAccount
                if (IsUseVinetlifeAccount)
                {
                    if (Session["CustomerId"] != null)
                    {
                        /// Ghi Log cho Phần tài khoản bị trừ
                        cmsLogAccountDO objLogAccount = new cmsLogAccountDO();
                        objLogAccount.AccountId = objAccount.AccountId;
                        objLogAccount.LogAccountType = "DECREASE";
                        objLogAccount.LogAccountPaymentCode = "ORDER";
                        objLogAccount.LogAccountPayment = "Thanh toán bằng tài khoản Vinetlife";
                        objLogAccount.Content = "<ul><li><b>Mua hàng hóa bằng tài khoản Vinetlife</b></li><li>Số tiền: <b>" + string.Format("{0:#,#}", SpmcPayByVinetlifeAccount) + " đ </b></li><li>Ngày giao dịch: <b>" + DateTime.Now.ToString("dd/MM/yyyy hh:mm tt") + "</b></li></ul>";
                        objLogAccount.CreatedDate = DateTime.Now;
                        objLogAccount.OrderId = idOrder;
                        objLogAccount.DepositBeforeTran = objAccount.Deposite;
                        objLogAccount.CurrentDeposite = objAccount.Deposite - SpmcPayByVinetlifeAccount;
                        objLogAccount.TransactionDate = DateTime.Now;

                        new cmsLogAccountBL().Insert(objLogAccount);

                        /// Update lại tài khoản Vinetlife
                        objAccount.DepositBeforeTran = objAccount.Deposite;
                        objAccount.Deposite = objAccount.Deposite - SpmcPayByVinetlifeAccount;
                        objAccount.LastSaveDate = DateTime.Now;

                        accountBL.Update(objAccount);
                    }
                }
                /// Cong tien cho tai khoan gioi thieu no
                /// Check if It has introduction user
                if (!string.IsNullOrEmpty(itemCustomerDO.IntroductionCustomerCode) || itemCustomerDO.IntroductionCustomerId > 0)
                {
                    cmsAccountReceiveMoneyDO objAccountReceivedMoney = new cmsAccountReceiveMoneyDO();
                    objAccountReceivedMoney.CreatedDate = DateTime.Now;
                    objAccountReceivedMoney.FromCustomerId = itemCustomerDO.Id;
                    objAccountReceivedMoney.ToCustomerId = itemCustomerDO.IntroductionCustomerId;
                    objAccountReceivedMoney.UserId = -1;
                    objAccountReceivedMoney.ReceivedPercent = PercentForIntroduction;
                    objAccountReceivedMoney.ReceivedValue = (itemOrderDO.SubTotal * PercentForIntroduction / 100);
                    objAccountReceivedMoney.OrderValue = itemOrderDO.SubTotal;
                    objAccountReceivedMoney.OrderCode = itemOrderDO.InvoiceNumber;
                    objAccountReceivedMoney.Status = EnumReceivedMoneyStatus.V_RECEIVED_PROCESSING;

                    new cmsAccountReceiveMoneyBL().Insert(objAccountReceivedMoney);
                }
                /// Ghi Log Order History
                CS_OrderHistoryDO objOrderHistory = new CS_OrderHistoryDO();

                objOrderHistory.Action = EnumOrderHistory.V_NEW;
                objOrderHistory.Contents = EnumOrderHistory.V_NEW_TEXT;
                objOrderHistory.CreateDate = DateTime.Now;
                objOrderHistory.OrderId = idOrder;
                objOrderHistory.UserId = -1;
                objOrderHistory.Note = "";
                objOrderHistory.IP = Request.ServerVariables["REMOTE_ADDR"].Trim();

                new CS_OrderHistoryBL().Insert(objOrderHistory);
                return true;
            }
            catch
            {
                return false;
            }
        }
        protected void btnBack_Click(object sender, EventArgs e)
        {
            Response.Redirect("/");
        }
    }
}